using System;
using System.Threading;
using System.Timers;

namespace RxjhServer
{
	public class 伏魔洞副本
	{
		private object AsyncLock = new object();

		private System.Timers.Timer 准备计时器;

		private System.Timers.Timer 小怪击杀计时器;

		private System.Timers.Timer BOSS击杀计时器;

		private System.Timers.Timer 刷小怪物记时器;

		private System.Timers.Timer 刷BOSS记时器;

		private System.Timers.Timer 副本结束记时器;

		private DateTime 申请时间;

		private DateTime 准备时间;

		private int 副本地图 = 20001;

		private 组队Class 参加队伍;

		public 伏魔洞副本(int 地图, 组队Class 组队)
		{
			try
			{
				World.副本进程 = 1;
				副本地图 = 地图;
				参加队伍 = 组队;
				准备计时器 = new System.Timers.Timer(60000.0);
				准备计时器.Elapsed += 准备记时器结束事件;
				准备计时器.Enabled = true;
				准备计时器.AutoReset = true;
				准备时间 = DateTime.Now.AddMinutes(1.0);
				foreach (Players value in 参加队伍.组队列表.Values)
				{
					value.系统提示("伏魔洞副本申请成功,一分钟后将被传送到伏魔洞", 10, "副本提示");
				}
			}
			catch (Exception ex)
			{
				Form1.WriteLine(1, "门战 准备记时器结束事件 出错：" + ex?.ToString());
			}
		}

		public void 准备记时器结束事件(object source, ElapsedEventArgs e)
		{
			if (World.jlMsg == 1)
			{
				Form1.WriteLine(1, "准备记时器结束事件");
			}
			try
			{
				int num = (int)准备时间.Subtract(DateTime.Now).TotalSeconds;
				if (num <= 0)
				{
					准备计时器.Enabled = false;
					准备计时器.Close();
					准备计时器.Dispose();
					foreach (Players value in 参加队伍.组队列表.Values)
					{
						value.副本次数++;
						if (副本地图 == 20001)
						{
							value.移动(0f, 300f, 15f, 副本地图);
						}
						else
						{
							value.移动(0f, 0f, 15f, 副本地图);
						}
						value.系统公告("副本开始,请尽快击杀身边的怪物");
					}
					刷小怪物记时器 = new System.Timers.Timer(60000.0);
					刷小怪物记时器.Elapsed += 刷新小怪计时器事件;
					刷小怪物记时器.Enabled = true;
					刷小怪物记时器.AutoReset = true;
				}
			}
			catch (Exception ex)
			{
				Form1.WriteLine(1, "门战 准备记时器结束事件 出错：" + ex?.ToString());
			}
		}

		public void 击杀小怪计时器事件(object source, ElapsedEventArgs e)
		{
			try
			{
				int num = (int)申请时间.Subtract(DateTime.Now).TotalSeconds;
				if (num <= 0)
				{
					小怪击杀计时器.Enabled = false;
					小怪击杀计时器.Close();
					小怪击杀计时器.Dispose();
					副本结束记时器 = new System.Timers.Timer(60000.0);
					副本结束记时器.Elapsed += 副本结束记时器事件;
					副本结束记时器.Enabled = true;
					副本结束记时器.AutoReset = true;
				}
				else
				{
					int num2 = 0;
					foreach (Players value in 参加队伍.组队列表.Values)
					{
						if (value != null && value.人物坐标_地图 == 副本地图)
						{
							value.系统提示("请在" + (num / 60).ToString() + "分钟内击杀所有小怪物,看不到怪物请移动到远处再移动回来", 10, "副本提示");
							num2++;
						}
					}
					if (World.统计地图怪物数量(副本地图) < 1)
					{
						小怪击杀计时器.Enabled = false;
						小怪击杀计时器.Close();
						小怪击杀计时器.Dispose();
						刷BOSS记时器 = new System.Timers.Timer(60000.0);
						刷BOSS记时器.Elapsed += 刷新BOSS计时器事件;
						刷BOSS记时器.Enabled = true;
						刷BOSS记时器.AutoReset = true;
					}
				}
			}
			catch (Exception ex)
			{
				小怪击杀计时器.Enabled = false;
				小怪击杀计时器.Close();
				小怪击杀计时器.Dispose();
				副本结束记时器 = new System.Timers.Timer(60000.0);
				副本结束记时器.Elapsed += 副本结束记时器事件;
				副本结束记时器.Enabled = true;
				副本结束记时器.AutoReset = true;
				Form1.WriteLine(1, "副本 击杀小怪计时器事件 出错：" + ex?.ToString());
			}
		}

		public void 刷新小怪计时器事件(object source, ElapsedEventArgs e)
		{
			try
			{
				World.delNpc(副本地图);
				刷小怪物记时器.Enabled = false;
				刷小怪物记时器.Close();
				刷小怪物记时器.Dispose();
				if (副本地图 == 20001)
				{
					World.AddNpc(15172, 0f, 400f, 副本地图);
					World.AddNpc(15173, 10f, 420f, 副本地图);
					World.AddNpc(15174, 20f, 410f, 副本地图);
					World.AddNpc(15175, 30f, 430f, 副本地图);
				}
				else
				{
					World.AddNpc(15201, -10f, -40f, 副本地图, 1);
					World.AddNpc(15202, -20f, -50f, 副本地图, 1);
					World.AddNpc(15203, -30f, -60f, 副本地图, 1);
					World.AddNpc(15201, -100f, -70f, 副本地图, 1);
					World.AddNpc(15202, -120f, -80f, 副本地图, 1);
					World.AddNpc(15203, -130f, -90f, 副本地图, 1);
					World.AddNpc(15201, -140f, -100f, 副本地图, 1);
					World.AddNpc(15202, -80f, -120f, 副本地图, 1);
					World.AddNpc(15203, -90f, -110f, 副本地图, 1);
					World.AddNpc(15201, -100f, -100f, 副本地图, 1);
					World.AddNpc(15202, -120f, -90f, 副本地图, 1);
					World.AddNpc(15203, -150f, -80f, 副本地图, 1);
					World.AddNpc(15201, -130f, -70f, 副本地图, 1);
					World.AddNpc(15202, -100f, -60f, 副本地图, 1);
					World.AddNpc(15203, -80f, -50f, 副本地图, 1);
					World.AddNpc(15201, -70f, -40f, 副本地图, 1);
					World.AddNpc(15202, -60f, -30f, 副本地图, 1);
					World.AddNpc(15203, -110f, -20f, 副本地图, 1);
					World.AddNpc(15202, -50f, -20f, 副本地图, 1);
					World.AddNpc(15203, -100f, -10f, 副本地图, 1);
					World.AddNpc(15201, -97f, -92f, 副本地图, 1);
					World.AddNpc(15202, -56f, -91f, 副本地图, 1);
					World.AddNpc(15203, -56f, -98f, 副本地图, 1);
					World.AddNpc(15201, -70f, 151f, 副本地图, 1);
					World.AddNpc(15202, -112f, -161f, 副本地图, 1);
					World.AddNpc(15203, -54f, 154f, 副本地图, 1);
					World.AddNpc(15201, 0f, 75f, 副本地图, 1);
					World.AddNpc(15202, -53f, 96f, 副本地图, 1);
					World.AddNpc(15203, -60f, -95f, 副本地图, 1);
					World.AddNpc(15201, -53f, -94f, 副本地图, 1);
					World.AddNpc(15202, -97f, -90f, 副本地图, 1);
					World.AddNpc(15203, -55f, -80f, 副本地图, 1);
					World.AddNpc(15202, -58f, -91f, 副本地图, 1);
					World.AddNpc(15203, -54f, -98f, 副本地图, 1);
					World.AddNpc(15201, -72f, 151f, 副本地图, 1);
					World.AddNpc(15202, -112f, -161f, 副本地图, 1);
					World.AddNpc(15203, -56f, 154f, 副本地图, 1);
					World.AddNpc(15201, 3f, 75f, 副本地图, 1);
					World.AddNpc(15202, -8f, 96f, 副本地图, 1);
					World.AddNpc(15203, -63f, -95f, 副本地图, 1);
					World.AddNpc(15201, -55f, -94f, 副本地图, 1);
					World.AddNpc(15202, -93f, -90f, 副本地图, 1);
					World.AddNpc(15203, -55f, -80f, 副本地图, 1);
					World.AddNpc(15201, -377f, 314f, 副本地图, 1);
					World.AddNpc(15202, -379f, 315f, 副本地图, 1);
					World.AddNpc(15203, -401f, 375f, 副本地图, 1);
					World.AddNpc(15201, -398f, 371f, 副本地图, 1);
					World.AddNpc(15202, -455f, 387f, 副本地图, 1);
					World.AddNpc(15203, -452f, 385f, 副本地图, 1);
					World.AddNpc(15202, -477f, 328f, 副本地图, 1);
					World.AddNpc(15203, -475f, 325f, 副本地图, 1);
					World.AddNpc(15201, -427f, 277f, 副本地图, 1);
					World.AddNpc(15202, -420f, 268f, 副本地图, 1);
					World.AddNpc(15203, -361f, 273f, 副本地图, 1);
					World.AddNpc(15201, -368f, 277f, 副本地图, 1);
					World.AddNpc(15202, -451f, 378f, 副本地图, 1);
					World.AddNpc(15203, -453f, 366f, 副本地图, 1);
					World.AddNpc(15201, 385f, -133f, 副本地图, 1);
					World.AddNpc(15202, 358f, -98f, 副本地图, 1);
					World.AddNpc(15203, 316f, -101f, 副本地图, 1);
					World.AddNpc(15201, 336f, -87f, 副本地图, 1);
					World.AddNpc(15202, 385f, -54f, 副本地图, 1);
					World.AddNpc(15203, 444f, -99f, 副本地图, 1);
					World.AddNpc(15201, 408f, -156f, 副本地图, 1);
					World.AddNpc(15202, 394f, -233f, 副本地图, 1);
					World.AddNpc(15203, 451f, -155f, 副本地图, 1);
					World.AddNpc(15201, 339f, -87f, 副本地图, 1);
					World.AddNpc(15202, 382f, -54f, 副本地图, 1);
					World.AddNpc(15203, 441f, -99f, 副本地图, 1);
					World.AddNpc(15201, 404f, -156f, 副本地图, 1);
					World.AddNpc(15202, 391f, -233f, 副本地图, 1);
					World.AddNpc(15203, 456f, -155f, 副本地图, 1);
					World.AddNpc(15202, -66f, 121f, 副本地图, 1);
					World.AddNpc(15203, -67f, 120f, 副本地图, 1);
					World.AddNpc(15201, -65f, 122f, 副本地图, 1);
					World.AddNpc(15202, -68f, 115f, 副本地图, 1);
					World.AddNpc(15203, -75f, 120f, 副本地图, 1);
					World.AddNpc(15201, -80f, 122f, 副本地图, 1);
					World.AddNpc(15202, -89f, 115f, 副本地图, 1);
					World.AddNpc(15203, -85f, 121f, 副本地图, 1);
					World.AddNpc(15201, -95f, 115f, 副本地图, 1);
					World.AddNpc(15202, -110f, 122f, 副本地图, 1);
					World.AddNpc(15203, -105f, 122f, 副本地图, 1);
					World.AddNpc(15202, 367f, -215f, 副本地图, 1);
					World.AddNpc(15203, 360f, -210f, 副本地图, 1);
					World.AddNpc(15201, 365f, -213f, 副本地图, 1);
					World.AddNpc(15202, 355f, -211f, 副本地图, 1);
					World.AddNpc(15203, 414f, -93f, 副本地图, 1);
					World.AddNpc(15201, 410f, -95f, 副本地图, 1);
					World.AddNpc(15202, 413f, -96f, 副本地图, 1);
					World.AddNpc(15203, 415f, -97f, 副本地图, 1);
				}
				小怪击杀计时器 = new System.Timers.Timer(60000.0);
				小怪击杀计时器.Elapsed += 击杀小怪计时器事件;
				小怪击杀计时器.Enabled = true;
				小怪击杀计时器.AutoReset = true;
				申请时间 = DateTime.Now.AddMinutes(15.0);
				击杀小怪计时器事件(null, null);
			}
			catch (Exception ex)
			{
				Form1.WriteLine(1, "副本 刷新小怪计时器事件 出错：" + ex?.ToString());
			}
		}

		public void 击杀BOSS计时器事件(object source, ElapsedEventArgs e)
		{
			try
			{
				int num = (int)申请时间.Subtract(DateTime.Now).TotalSeconds;
				if (num <= 0)
				{
					BOSS击杀计时器.Enabled = false;
					BOSS击杀计时器.Close();
					BOSS击杀计时器.Dispose();
					副本结束记时器 = new System.Timers.Timer(60000.0);
					副本结束记时器.Elapsed += 副本结束记时器事件;
					副本结束记时器.Enabled = true;
					副本结束记时器.AutoReset = true;
				}
				else
				{
					int num2 = 0;
					foreach (Players value in 参加队伍.组队列表.Values)
					{
						if (value != null && value.人物坐标_地图 == 副本地图)
						{
							num2++;
							value.系统提示("请在" + (num / 60).ToString() + "分钟内击杀BOSS", 10, "副本提示");
						}
					}
					if (World.统计地图怪物数量(副本地图) < 1)
					{
						BOSS击杀计时器.Enabled = false;
						BOSS击杀计时器.Close();
						BOSS击杀计时器.Dispose();
						副本结束记时器 = new System.Timers.Timer(60000.0);
						副本结束记时器.Elapsed += 副本结束记时器事件;
						副本结束记时器.Enabled = true;
						副本结束记时器.AutoReset = true;
					}
				}
			}
			catch (Exception ex)
			{
				BOSS击杀计时器.Enabled = false;
				BOSS击杀计时器.Close();
				BOSS击杀计时器.Dispose();
				副本结束记时器 = new System.Timers.Timer(60000.0);
				副本结束记时器.Elapsed += 副本结束记时器事件;
				副本结束记时器.Enabled = true;
				副本结束记时器.AutoReset = true;
				Form1.WriteLine(1, "副本 击BOSS计时器事件 出错：" + ex?.ToString());
			}
		}

		public void 刷新BOSS计时器事件(object source, ElapsedEventArgs e)
		{
			try
			{
				World.delNpc(副本地图);
				刷BOSS记时器.Enabled = false;
				刷BOSS记时器.Close();
				刷BOSS记时器.Dispose();
				if (副本地图 == 20001)
				{
					World.AddNpc(15172, -100f, 400f, 副本地图);
					Thread.Sleep(100);
					World.AddNpc(15173, -110f, 405f, 副本地图);
					Thread.Sleep(100);
					World.AddNpc(15174, -120f, 400f, 副本地图, 1);
					Thread.Sleep(100);
					World.AddNpc(15175, -130f, 405f, 副本地图);
					Thread.Sleep(100);
				}
				else
				{
					World.AddNpc(15207, -101f, 1019f, 副本地图, 1);
					Thread.Sleep(100);
					World.AddNpc(15207, 229f, 184f, 副本地图, 1);
					Thread.Sleep(100);
					World.AddNpc(15207, 205f, 404f, 副本地图, 1);
					Thread.Sleep(100);
					World.AddNpc(15207, -362f, -471f, 副本地图, 1);
					Thread.Sleep(100);
					World.AddNpc(15207, -120f, -68f, 副本地图, 1);
				}
				BOSS击杀计时器 = new System.Timers.Timer(60000.0);
				BOSS击杀计时器.Elapsed += 击杀BOSS计时器事件;
				BOSS击杀计时器.Enabled = true;
				BOSS击杀计时器.AutoReset = true;
				申请时间 = DateTime.Now.AddMinutes(15.0);
			}
			catch (Exception ex)
			{
				Form1.WriteLine(1, "副本 刷新BOSS计时器事件 出错：" + ex?.ToString());
			}
		}

		public void 副本结束记时器事件(object source, ElapsedEventArgs e)
		{
			try
			{
				副本结束记时器.Enabled = false;
				副本结束记时器.Close();
				副本结束记时器.Dispose();
				try
				{
					foreach (Players value in 参加队伍.组队列表.Values)
					{
						if (value.人物坐标_地图 == 副本地图)
						{
							value.系统提示("副本挑战结束,如果中途退出请检查是否队伍有人退出了！", 10, "副本提示");
							value.移动(529f, 1528f, 15f, 101);
						}
					}
				}
				catch (Exception)
				{
				}
				Dispose();
			}
			catch (Exception ex2)
			{
				Form1.WriteLine(1, "副本 副本结束记时器事件 出错：" + ex2?.ToString());
			}
		}

		public void Dispose()
		{
			try
			{
				World.副本进程 = 0;
				foreach (Players value in World.allConnectedChars.Values)
				{
					if (value.人物坐标_地图 == 副本地图)
					{
						value.移动(529f, 1528f, 15f, 101);
					}
				}
				if (准备计时器 != null)
				{
					准备计时器.Enabled = false;
					准备计时器.Close();
					准备计时器.Dispose();
				}
				if (小怪击杀计时器 != null)
				{
					小怪击杀计时器.Enabled = false;
					小怪击杀计时器.Close();
					小怪击杀计时器.Dispose();
				}
				if (BOSS击杀计时器 != null)
				{
					BOSS击杀计时器.Enabled = false;
					BOSS击杀计时器.Close();
					BOSS击杀计时器.Dispose();
				}
				if (刷小怪物记时器 != null)
				{
					刷小怪物记时器.Enabled = false;
					刷小怪物记时器.Close();
					刷小怪物记时器.Dispose();
				}
				if (刷BOSS记时器 != null)
				{
					刷BOSS记时器.Enabled = false;
					刷BOSS记时器.Close();
					刷BOSS记时器.Dispose();
				}
				if (副本结束记时器 != null)
				{
					副本结束记时器.Enabled = false;
					副本结束记时器.Close();
					副本结束记时器.Dispose();
				}
				World.副本 = null;
				World.delNpc(副本地图);
			}
			catch (Exception ex)
			{
				Form1.WriteLine(1, "副本 Dispose() 出错：" + ex?.ToString());
			}
		}
	}
}
